O software de cálculo estrutural RFEM 6 é a base de um sistema de software composto por módulos. O programa principal RFEM 6 é utilizado para definir estruturas, materiais e ações para sistemas estruturais planos e espaciais constituídos por lajes, paredes, cascas e barras. O programa também permite criar estruturas combinadas, bem como modelar sólidos e elementos de contacto.
O RSTAB 9 é um programa de cálculo de estruturas reticuladas e pórticos 3D que reflete o estado atual da tecnologia e ajuda os engenheiros de estruturas a cumprir os requisitos da engenharia civil moderna.
Costuma perder muito tempo a calcular secções? A Dlubal Software e o programa autónomo RSECTION facilitam-lhe o trabalho determinando propriedades de secções e efetuando análises de tensões para diferentes secções.
Sabe sempre de onde vem o vento? Da direção da inovação, é claro! Com o RWIND 2, dispõe de um programa que utiliza um túnel de vento digital para a simulação numérica de fluxos de vento. O programa fornece estes fluxos em torno de eventuais geometrias de edifícios e determina as cargas de vento nas superfícies.
Procura uma vista geral de zonas de cargas de neve, velocidades de vento e cargas sísmicas? Então, está no sítio certo. Os mapas de zonas de carga são adequados para a determinação rápida e fácil de cargas de neve, velocidades de vento e cargas sísmicas de acordo com o Eurocódigo e outras normas internacionais.
Gostaria de experimentar o poder dos programas da Dlubal Software? Esta é a sua oportunidade! Com a versão completa gratuita de 90 dias, pode testar todos os nossos programas em detalhe.
A seguinte macro VBA mostra a criação de um apoio de nó com a não linearidade "Atividade parcial". O código fonte pode ser encontrado em Downloads.
Opção Explicit
'--------------------------Sub SetNSupports()'--------------------------Dim model As RFEM5.modelDim data As IModelDataDim support(0) As RFEM5.NodalSupportDim ISup As RFEM5.INodalSupportDim ISupPA As RFEM5.IPartialActivityDim nlPA como atividade parcial
e: If Err.Number <> 0 Then MsgBox Err.Description, , Err.Source
End Sub
Para criar um elemento não linear, como uma articulação de barra com um diagrama ou uma rotura, tem de criar primeiro a articulação de barra. Se o RFEM conhecer a articulação de barra, esta poderá ser acedida através da interface IMemberEndRelease. Esta interface contém os métodos GetData() e SetData(). Ambos os métodos são capazes de ler ou escrever os dados de articulação de barra simples do tipo MemberEndRelease, bem como os dados de uma não linearidade.
No exemplo a seguir, primeiro é ativada uma articulação para a direção x na articulação de barra e, em seguida, o tipo WorkingDiagramType é definido como a não linearidade na direção x. Após estes dados terem sido transferidos para o RFEM utilizando um bloco Prepare-Finish-Modification, a não linearidade é criada internamente. Para preenchê-la com dados, primeiro são obtidos os dados existentes na interface da articulação de barra utilizando GetData ().
Após o preenchimento dos dados (NonlinearityDiagram), estes são novamente transferidos com SetData():
Sub SetNLDiagram()Dim model As RFEM5.modelSet model = GetObject(, "RFEM5.Model")On Error GoTo eDim iApp As RFEM5.ApplicationSet iApp = model.GetApplicationiApp.LockLicenseiApp.ShowDim iModelData As RFEM5.iModelDataSet iModelData = model.GetModelData' modify member end release' set nonlinearity "Diagram" for x translationDim iMemHing As RFEM5.IMemberHingeSet iMemHing = iModelData.GetMemberHinge(1, AtNo)Dim memHing As RFEM5.MemberHingememHing = iMemHing.GetData()memHing.TranslationalConstantX = 0memHing.TranslationalNonlinearityX = WorkingDiagramType' Set new dataiModelData.PrepareModificationiMemHing.SetData memHingiModelData.FinishModification' create diagramDim tbl1() As DoubleReDim tbl1(1, 1)tbl1(0, 0) = 0 ' u-xtbl1(0, 1) = 0 ' P-xtbl1(1, 0) = 0.02 ' u-x (mm)tbl1(1, 1) = 2000 ' P-x (N)Dim nldHing As RFEM5.NonlinearityDiagramnldHing.ForceType = StiffnessDiagramForceType.NoneStiffnessForcenldHing.PositiveZoneType = DiagramAfterLastStepType.TearingDiagramTypenldHing.PositiveZone = tbl1nldHing.Symmetric = TrueDim iNldiag As RFEM5.INonlinearityDiagramSet iNldiag = iMemHing.GetNonlinearity(AlongAxisX)' Set new dataiModelData.PrepareModificationiNldiag.SetData nldHingiModelData.FinishModificatione: If Err.Number <> 0 Then MsgBox Err.description, , Err.Sourcemodel.GetApplication.UnlockLicenseEnd Sub
O procedimento é semelhante para apoios de nós e outras não linearidades.
A rotação de um apoio de nó é definida por meio de um sistema de coordenadas definido pelo utilizador. No exemplo a seguir, um apoio de nó é rodado 45° sobre o eixo z. Não é necessário definir um novo sistema de coordenadas através de nós. Neste caso, é suficiente utilizar a opção RotatedSystemType, que permite uma rotação espacial do apoio através de três rotações em torno dos eixos x, y e z. A rotação é introduzida em radianos:
Sub test_nodal_support()Dim iApp As RFEM5.ApplicationSet iApp = GetObject(, "RFEM5.Application")iApp.LockLicenseDim iMod As RFEM5.IModel3Set iMod = iApp.GetActiveModelOn Error GoTo e' get interface of modeldataDim iModData As RFEM5.IModelData2Set iModData = iMod.GetModelData' get interface of nodal supportDim iNs As RFEM5.INodalSupportSet iNs = iModData.GetNodalSupport(1, AtNo)' get nodal support dataDim ns As RFEM5.NodalSupportns = iNs.GetData' modify datans.ReferenceSystem = UserDefinedSystemTypens.UserDefinedReferenceSystem.Axis1 = AxisXns.UserDefinedReferenceSystem.Axis2 = AxisYns.UserDefinedReferenceSystem.Type = RotatedSystemTypens.UserDefinedReferenceSystem.RotationAngles.X = 0ns.UserDefinedReferenceSystem.RotationAngles.Y = 0ns.UserDefinedReferenceSystem.RotationAngles.Z = 45 * 3.14159265359 / 180' set nodal support dataiModData.PrepareModificationiNs.SetData nsiModData.FinishModificatione:If Err.Number <> 0 Then MsgBox Err.description, vbCritical, Err.SourceiMod.GetApplication.UnlockLicenseSet iMod = NothingEnd Sub
O programa retira o apoio de nó existente do modelo atualmente aberto e modifica-o. Uma vez que o sistema de coordenadas definido pelo utilizador não faz diretamente parte da interface INodalSupport do apoio de nó, a rotação também pode ser transferida ao criar um apoio de nó.
Para poder atribuir uma excentricidade a uma barra, geralmente, é necessário criá-la antes de definir a barra.
No exemplo a seguir, é apresentada uma abordagem alternativa. Primeiro, é criada a excentricidade e, depois, atribuída a uma barra existente através da respetiva interface:</p>
'---------------------Sub SetEccentricity()'---------------------Dim model As RFEM5.modelSet model = GetObject(, "RFEM5.Model")model.GetApplication.LockLicenseOn Error GoTo eDim iModData As RFEM5.iModelDataSet iModData = model.GetModelData' create eccentricityDim eccens(0 To 0) As RFEM5.MemberEccentricityeccens(0).No = 1eccens(0).Comment = "test eccentricity"eccens(0).ReferenceSystem = LocalSystemTypeeccens(0).Start.X = 0eccens(0).Start.Y = 0eccens(0).Start.Z = 0eccens(0).End.X = 0eccens(0).End.Y = 0eccens(0).End.Z = 0eccens(0).HingeAtEndNode = Falseeccens(0).HingeAtStartNode = Falseeccens(0).HorizontalAlignment = Middleeccens(0).VerticalAlignment = Bottomeccens(0).TransverseOffset = Trueeccens(0).ReferenceObjectNo = 2eccens(0).ReferenceObjectType = MemberObjecteccens(0).HorizontalAxisOffset = Middleeccens(0).VerticalAxisOffset = Topeccens(0).StartAdjoiningMembersOffset = Falseeccens(0).EndAdjoiningMembersOffset = FalseiModData.PrepareModificationiModData.SetMemberEccentricities eccensiModData.FinishModification' add eccentricity to memberDim iMem As RFEM5.IMemberSet iMem = iModData.GetMember(1, AtNo)Dim mem As RFEM5.Membermem = iMem.GetDatamem.EccentricityNo = 1iModData.PrepareModificationiMem.SetData memiModData.FinishModificatione: If Err.Number <> 0 Then MsgBox Err.Description, , Err.Sourcemodel.GetApplication.UnlockLicenseEnd Sub
As excentricidades da barra apenas podem ser transferidas como um campo. Para este efeito, foi criado um campo com apenas um elemento. Na imagem anexada, os elementos individuais são distribuídos com referência aos elementos gráficos.
O atrito representa uma não linearidade e, portanto, só pode ser modificado através da interface para a articulação de barra.
Para tal, a articulação de barra deve ser criada primeiro, caso ainda não esteja disponível. Em seguida, é adicionada a interface IMemberHinge para a articulação de barra e depois para a não linearidade (aqui IFriction). Poderá depois utilizar os métodos GetData e SetData para modificar os dados (aqui Friction):
Sub SetMemberHingeFriction() Dim model As RFEM5.model Set model = GetObject(, "RFEM5.Model") model.GetApplication.LockLicense On Error GoTo e Dim data As IModelData Set data = model.GetModelData Dim hinge(0 To 0) As RFEM5.MemberHinge hinge(0).No = 1 hinge(0).RotationalConstantX = 1 hinge(0).RotationalConstantY = 2 hinge(0).RotationalConstantZ = 3 hinge(0).TranslationalConstantX = 4 hinge(0).TranslationalConstantY = 5 hinge(0).TranslationalConstantZ = 6 hinge(0).Comment = "Member Hinge 1" hinge(0).TranslationalNonlinearityX = FrictionAType data.PrepareModification data.SetMemberHinges hinge data.FinishModification ' get interface for member hinge Dim imemhing As IMemberHinge Set imemhing = data.GetMemberHinge(1, AtNo) ' get interface for nonlinearity "friction" Dim iFric As IFriction Set iFric = imemhing.GetNonlinearity(AlongAxisX) ' get friction data Dim fric As Friction fric = iFric.GetData fric.Coefficient1 = 0.3 ' set friction data data.PrepareModification iFric.SetData fric data.FinishModification e: If Err.Number <> 0 Then MsgBox Err.Description, , Err.Source Set data = Nothing model.GetApplication.UnlockLicense Set model = NothingEnd Sub
No caso do atrito Vy + Vz, o Coeficiente2 é utilizado para definir o segundo coeficiente. A mola de translação na caixa de diálogo Atrito é controlada pela mola de translação da articulação de barra. Neste caso em concreto, é TranslationalConstantX para a direção x (ver Figura 01).
Os parâmetros de cálculo de um caso de carga não podem ser definidos inicialmente ao criá-lo, mas apenas depois através da interface de um caso de carga existente. Para obter a interface de um caso de carga, tem de obter primeiro as interfaces 'IModel' e 'ILoads':
Sub test_analysis_parameters()Dim iApp As RFEM5.ApplicationSet iApp = GetObject(, "RFEM5.Application")iApp.LockLicenseDim iMod As RFEM5.IModel3Set iMod = iApp.GetActiveModelOn Error GoTo e' get interface of loadsDim iLds As RFEM5.iLoadsSet iLds = iMod.GetLoads' get interface of load caseDim iLc As RFEM5.ILoadCaseSet iLc = iLds.GetLoadCase(1, AtNo)' get analysis parametersDim param_analy As RFEM5.AnalysisParametersparam_analy = iLc.GetAnalysisParameters' change analysis parametersparam_analy.Method = Postcriticalparam_analy.ModifyLoadingByFactor = Trueparam_analy.LoadingFactor = 1.5' ...' set new analysis parametersiLds.PrepareModificationiLc.SetAnalysisParameters param_analyiLds.FinishModificatione:If Err.Number <> 0 Then MsgBox Err.description, vbCritical, Err.SourceiMod.GetApplication.UnlockLicenseSet iMod = NothingEnd Sub
Utilize 'ILoads.GetLoadcase' para obter a interface para um caso de carga específico. Esta interface disponibiliza as funções 'GetAnalysisParameters' e 'SetAnalysisparameters' com as quais os parâmetros podem ser lidos e escritos.
Este mesmo procedimento também pode ser utilizado para combinações de carga.
Para eliminar elementos, existe a função "DeleteObjects()" na interface de dados do modelo. A eliminação de todas as barras tem o seguinte aspeto:
Tenha em atenção que a função "DeleteObjects" apenas funciona com o número do objeto e não com o índice do objeto. Esses números são transferidos como uma cadeia de caracteres separada por vírgulas.
Por esse motivo, foi necessário, primeiro, ir buscar todas as barras. Em seguida, o campo de barra foi executado em ciclo e todos os números da barra foram introduzidos na cadeia de caracteres.
A seguinte macro VBA mostra a criação de um apoio nodal com um diagrama de não linearidade. O código fonte pode ser encontrado em Downloads.
Uma carga de temperatura é um tipo de carga de superfície e, portanto, é aplicada como todas as outras cargas de superfície. Para fazer isso, é necessário primeiro obter a interface para o modelo, depois para as cargas e, finalmente, para o caso de carga especial:
Sub surface_temp_load_test()' get interface from the opened model and lock the licence/programDim iModel As RFEM5.IModel3Set iModel = GetObject(, "RFEM5.Model")iModel.GetApplication.LockLicenseOn Error GoTo eDim iModelData As RFEM5.IModelData2Set iModelData = iModel.GetModelDataDim iLoa As RFEM5.iLoadsSet iLoa = iModel.GetLoadsDim iLc As RFEM5.ILoadCaseSet iLc = iLoa.GetLoadCase(1, AtNo)Dim surfLoad As RFEM5.SurfaceLoadsurfLoad.no = 1surfLoad.Type = TemperatureTypesurfLoad.Distribution = UniformTypesurfLoad.SurfaceList = "1"surfLoad.Magnitude1 = 10surfLoad.Magnitude4 = 40iLc.PrepareModificationiLc.SetSurfaceLoad surfLoadiLc.FinishModificatione: If Err.Number <> 0 Then MsgBox Err.description, , Err.SourceSet iModelData = NothingiModel.GetApplication.UnlockLicenseSet iModel = NothingEnd Sub
Para uma carga de temperatura constante, são utilizados os parâmetros Magnitude1 e Magnitude4, admitindo que Tc é Magnitude1 e dT é Magnitude4. Se for aplicada uma carga variável, Magnitude2 e Magnitude3 são utilizados para os outros pontos de canto para Tc e, de forma idêntica, Magnitude5 e Magnitude6 para dT.
A opção "Ligar linhas/barras" pode ser implementada com as funções "ConnectLines()" e "ConnectMemembers()". Ambas as funções esperam uma cadeia com os números das linhas ou barras:
Sub test_connect()Dim iMod As RFEM5.modelSet iMod = GetObject(, "RFEM5.Model")iMod.GetApplication.LockLicenseOn Error GoTo eDim iModData As RFEM5.IModelData2Set iModData = iMod.GetModelData()iModData.PrepareModificationiModData.ConnectLines ("3,4")iModData.ConnectMembers ("1,2")iModData.FinishModificatione:If Err.Number <> 0 Then MsgBox Err.description, vbCritical, Err.SourceiMod.GetApplication.UnlockLicenseSet iMod = NothingEnd Sub
Neste exemplo, são ligadas as linhas 1 e 2 e é criado um nó no ponto de intersecção. O mesmo se aplica às barras 1 e 2, onde também é criado um novo nó no ponto de intersecção.